/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.indicadores.bo;

import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.indicadores.dao.AnaliseValorIndicadorDAO;
import br.uniceub.fsw.indicadores.vo.AnaliseValorIndicadorVO;

/**
 * Business Object da entidade AnaliseValorIndicador. Essa classe é responsável por todos as
 * funcionalidades de negócio relacionadas à entidade.
 * 
 @author Filipe Scafuto Vieira ra20463917
 */
public class AnaliseValorIndicadorBO {

   AnaliseValorIndicadorDAO analiseValorIndicadorDAO = new AnaliseValorIndicadorDAO();
    
   
   
    /**
     * Valida se o registro da analise do valor de indicador está pronto para inserção ou atualização.
     * 
     * @param analiseValorIndicador analise do valor de indicador a ser verificada.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso a analise do valor de indicador 
     * informada não possua condições de ser inserido ou atualizado no banco de dados.
     */
    public void validaAnaliseValorIndicador(AnaliseValorIndicadorVO analiseValorIndicador, boolean eNovo) throws Exception, NegocioException {
        
        String mensagem = new String();
        
        if(!eNovo && analiseValorIndicador.getIdAnaliseValorIndicador() == null) {
            mensagem = mensagem.concat("ID da analise do valor de indicador não informado.<br />");
        }
        
        if(analiseValorIndicador.getCdValorIndicador() == null || analiseValorIndicador.getCdValorIndicador() == 0) {
            mensagem = mensagem.concat("Valor de indicador relacionado não informado.<br />");
        }

        if(analiseValorIndicador.getDsAnaliseValorIndicador() == null || analiseValorIndicador.getDsAnaliseValorIndicador().equals("")) {
                mensagem = mensagem.concat("Analise do valor de indicador obrigatória.<br />");
        }  

        if(eNovo && analiseValorIndicador.getCdValorIndicador() != null && analiseValorIndicador.getCdValorIndicador() != 0 && analiseValorIndicador.getDsAnaliseValorIndicador() != null && !analiseValorIndicador.getDsAnaliseValorIndicador().toString().isEmpty()) {
            try {
                validarVOUnico(analiseValorIndicador);
            }
            catch(NegocioException e) {
                mensagem = mensagem.concat(e.getMessage());
            }
            catch(Exception e) {
                throw new Exception(e.getMessage());
            }
        }
        
        if(!mensagem.isEmpty())
            throw new NegocioException(mensagem);
    }

    /**
     * Valida se já existe um registro de analise do valor de indicador no Banco de Dados como verificação para inserção.
     * 
     * @param analiseValorIndicador analise do valor de indicador a ser verificada.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso a analise do valor de indicador 
     * informada não possua um valor de indicador para a verificação ou se já exista no banco de dados uma análise para o valor informado.
     */
    public void validarVOUnico(AnaliseValorIndicadorVO analiseValorIndicador) throws Exception, NegocioException {
        
        if(analiseValorIndicador.getCdValorIndicador() == null)
            throw new Exception("Código do valor do indicador não foi informado.");
                
        AnaliseValorIndicadorVO analiseValorIndicadorExemplo = new AnaliseValorIndicadorVO();
        analiseValorIndicadorExemplo.setCdValorIndicador(analiseValorIndicador.getCdValorIndicador());
        
        if(!analiseValorIndicadorDAO.consultarPorExemplo(analiseValorIndicadorExemplo).isEmpty())
            throw new NegocioException("Já existe uma análise para esse resultado de indicador na base de dados");
    }
    
}
